package com.itheima.d01_foodmanager.service;

import com.itheima.d01_foodmanager.entity.Food;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.UUID;

/**
 * 菜品业务类：提供菜品相关的业务功能方法
 *    1.显示功能菜单
 *    2.添加菜品功能
 *    3.删除菜品功能
 *    4.修改菜品功能
 *    5.查询所有菜品功能
 *    6.查询指定编号的菜品功能
 */
public class FoodService {
    //注意：业务类需要管理多少菜品数据？很多，如何管理同时管理很多菜品信息？
    //解决：创建大的容器进行管理？数组/集合
    ArrayList<Food>  foods = new ArrayList<>();

    //创建一个扫描器
    Scanner sc = new Scanner(System.in);//作用范围：整个类中的所有方法都可以使用


    //1.显示功能菜单
    public void start(){
        //准备测试数据
        // 1. 九转大肠
        foods.add(new Food("JN001", "九转大肠", 78.0, 68.0,"鲁菜经典，酸甜苦辣咸五味俱全，大肠软嫩有嚼劲"));
        // 2. 糖醋鲤鱼
        foods.add(new Food("JN002", "糖醋鲤鱼", 98.0, 88.0,"黄河鲤鱼制作，外焦里嫩，酸甜可口，造型优美"));
        // 3. 爆炒腰花
        foods.add(new Food("JN003", "爆炒腰花", 65.0, 58.0,"传统鲁菜，腰花脆嫩，刀工精细，酱香浓郁"));
        // 4. 把子肉
        foods.add(new Food("JN004", "把子肉", 22.0, 18.0,"济南特色小吃，肥而不腻，入口即化，配米饭绝佳"));
        // 5. 奶汤蒲菜
        foods.add(new Food("JN005", "奶汤蒲菜", 48.0, 42.0,"大明湖特产蒲菜制作，汤色乳白，清香鲜嫩"));
        // 6. 油旋
        foods.add(new Food("JN006", "油旋", 6.0, 5.0,"济南传统小吃，外皮酥脆，内瓤柔嫩，葱香扑鼻"));

        // 7. 黄焖鸡米饭
        foods.add(new Food("JN007", "黄焖鸡米饭", 28.0, 25.0,"起源于济南的全国知名快餐，鸡肉鲜嫩，汤汁浓郁"));
        // 9. 宫保鸡丁
        foods.add(new Food("JN009", "宫保鸡丁", 38.0, 35.0,"鲁菜版宫保鸡丁，酱香微辣，鸡肉滑嫩，花生酥脆"));
        // 8. 甜沫
        foods.add(new Food("JN008", "甜沫", 5.0, 4.0,"济南特色早餐，咸香微辣，内含小米面、花生、豆腐等"));
        // 10. 济南烤鸭
        foods.add(new Food("JN010", "济南烤鸭", 128.0, 118.0, "不同于北京烤鸭，皮酥肉嫩，蘸甜面酱配小饼食用"));


        System.out.println("正在启动菜品管理系统...");
        while(true){
            //1.1 展示功能菜单：
            System.out.println("菜品功能菜单：");
            System.out.println("1.添加菜品");
            System.out.println("2.删除菜品");
            System.out.println("3.修改菜品");
            System.out.println("4.查询所有菜品");
            System.out.println("5.模糊查询菜品");
            System.out.println("6.退出系统");
            //1.2 提示用户输入功能编号
            System.out.print("请输入功能编号：");
            int choose = sc.nextInt();
            //1.3  根据用户输入的功能编号，调用对应功能方法
            switch (choose){
                case 1://添加菜品功能
                    System.out.println("正在添加菜品...");
                    addFood();
                    break;
                case 2://删除菜品功能
                    System.out.println("正在删除菜品...");
                    deleteFood();
                    break;
                case 3://修改菜品功能
                    System.out.println("正在修改菜品...");
                    updateFood();
                    break;
                case 4://查询所有菜品功能
                    System.out.println("正在查询所有菜品...");
                    showAllFoods();
                    break;
                case 5://查询指定编号的菜品功能
                    System.out.println("正在查询指定编号的菜品...");
                    showOneFood();
                    break;
                case 6://退出系统功能
                    System.out.println("正在退出系统...");
                    return;
                default:
                    System.out.println("输入的功能编号有误，请重新输入！");
            }

            System.out.println();
            System.out.println();
            System.out.println();
        }
    }

    //2.添加菜品功能
    public void addFood(){
        //2.1 提示用户输入菜品信息
        //JDK提供生成唯一的编号：UUID工具
        UUID uuid = UUID.randomUUID(); //构建UUID工具对象
        String id = uuid.toString(); //调用toString 获取UUID编号

        System.out.println("请输入菜品名称：");
        String name = sc.next();

        System.out.println("请输入菜品价格：");
        double price = sc.nextDouble();

        System.out.println("请输入菜品折扣：");
        double discount = sc.nextDouble();

        System.out.println("请输入菜品信息：");
        String info = sc.next();

        //2.2 存储菜品数据：找对象，实体类对象Food
        Food food = new Food(id, name, price, discount, info);

        //2.3 将实体对象存储的菜品数据，交给业务类管理
        foods.add(food);
    }

    //3.模糊删除菜品功能
    public void deleteFood(){
        //3.1 提示用户输入要删除的菜品名称（一部分）
        System.out.println("请输入要删除的菜品名称：");

        //3.2 接收用户输入的菜品名称
        String name = sc.next();

        //3.3 遍历菜品集合，查找菜品
        for (int i = 0; i < foods.size(); i++) {
            Food food = foods.get(i);
            String nameStr = food.getName();
            //3.4 匹配菜品名称，如果匹配成功，删除
            if(nameStr.contains(name) ){
                foods.remove(i); //存在：漏删的BUG
                i--;             //解决：需要再次判断递补上来的菜
            }
        }

        System.out.println("删除结束！");
    }

    //4.修改菜品功能
    public void updateFood(){
        //4.1 查询菜品信息
        //4.1.1 提示用户输入要修改的菜品编号
        System.out.println("请输入要修改的菜品编号：");
        //4.1.2 获取用户输入的编号
        String id = sc.next();
        //4.1.3 根据用户输入的编号，查询菜品集合
        for (int i = 0; i < foods.size(); i++) {
            Food  food = foods.get(i);
            String foodId = food.getId();
            if(foodId.equals(id)){
                //-------------------------------
                //4.2 修改菜品
                //4.2.1 提示用户输入要修改的菜品信息
                System.out.println("请输入新的菜品名称：");
                String name = sc.next();
                System.out.println("请输入新的菜品价格：");
                double price = sc.nextDouble();
                System.out.println("请输入新的菜品折扣：");
                double discount = sc.nextDouble();
                System.out.println("请输入新的菜品信息：");
                String info = sc.next();

                //4.2.2 修改菜品信息
                food.setName(name);
                food.setPrice(price);
                food.setDiscount(discount);
                food.setInfo(info);
            }
        }
        System.out.println("修改结束！");
    }

    //5.查询所有菜品功能
    public void showAllFoods(){
        //5.1 遍历菜品集合
        for (int i = 0; i < foods.size(); i++) {
            //5.2 获取集合中的每一道菜
            Food food = foods.get(i);//调用方法时.var ：自动创建变量接收返回结果

            //5.3展示所有菜品数据
            System.out.println("菜品编号："+food.getId());
            System.out.println("菜品名称："+food.getName());
            System.out.println("菜品原价："+food.getPrice());
            System.out.println("菜品折扣："+food.getDiscount());
            System.out.println("菜品描述："+food.getInfo());
            System.out.println("-------");
        }
        System.out.println("菜品数量："+foods.size());

    }

    //6.模糊的菜品信息查询功能
    public void showOneFood(){
        //6.1 提示用户输入要查询的菜品名称
        System.out.println("请输入需要查询的菜品名称：");

        //6.2 接收用户输入的菜品名称
        String name  = sc.next();

        //6.3 遍历菜品集合，查找菜品
        for (int i = 0; i < foods.size(); i++) {
            Food food = foods.get(i); //获取菜品对象
            String foodName = food.getName();//获取菜品名称
            if(foodName.contains(name)){//比较菜品名称是否匹配
                //6.4 打印菜品信息
                System.out.println("菜品编号："+food.getId());
                System.out.println("菜品名称："+food.getName());
                System.out.println("菜品原价："+food.getPrice());
                System.out.println("菜品折扣："+food.getDiscount());
                System.out.println("菜品描述："+food.getInfo());
                System.out.println("-------");
            }
        }
    }

}
